package com.feifan.common.utils.baiduai;

import com.alibaba.fastjson.JSONObject;
import com.feifan.common.utils.StringUtils;

import java.util.HashMap;

/**
 * 错误消息
 * @author: Alex
 * @create: 2020-09-19 19:14
 **/
public class BaiDuAiResult extends HashMap<String, Object> {

    /**
     * 状态码
     */
    public static final String CODE_TAG = "code";
    /**
     * 返回内容
     */
    public static final String MSG_TAG = "msg";
    /**
     * 数据对象
     */
    public static final String DATA_TAG = "data";
    private static final long serialVersionUID = 1L;

    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public BaiDuAiResult() {
    }


    /**
     * 初始化一个新创建的 AjaxResult 对象
     * @param type 状态类型
     * @param msg  返回内容
     */
    public BaiDuAiResult(BaiDuAiResult.Type type, String msg) {
        super.put(CODE_TAG, type.value);
        super.put(MSG_TAG, msg);
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     * @param type 状态类型
     * @param msg  返回内容
     * @param data 数据对象
     */
    public BaiDuAiResult(BaiDuAiResult.Type type, String msg, Object data) {
        super.put(CODE_TAG, type.value);
        super.put(MSG_TAG, msg);
        if (StringUtils.isNotNull(data)) {
            super.put(DATA_TAG, data);
        }
    }

    /**
     * 错误码转中文
     * @return
     */
    public static String errorMessage(String json) {
        JSONObject jsonObject = JSONObject.parseObject(json);
        int res1 = jsonObject.getInteger("error_code");
        String errorCode = String.valueOf(res1);
        switch (errorCode) {
            case "222002":
            case "222003":
            case "222004":
            case "222005":
            case "222006":
            case "222007":
            case "222008":
            case "222009":
            case "222010":
            case "222011":
            case "222012":
            case "222013":
            case "222014":
            case "222015":
            case "222016":
            case "222017":
            case "222018":
            case "222019":
            case "222020":
            case "222021":
            case "222022":
            case "222023":
            case "222024":
            case "222025":
            case "222026":
                return "参数格式错误";
            case "222901":
            case "222902":
            case "222903":
            case "222904":
            case "222905":
            case "222906":
            case "222907":
            case "222908":
            case "222909":
            case "222910":
            case "222911":
            case "222912":
            case "222913":
            case "222914":
            case "222915":
            case "222916":
            case "222961":
                return "系统繁忙";
            case "1":
                return "服务器内部错误";
            case "2":
                return "服务暂不可用";
            case "3":
                return "调用的API不存在";
            case "4":
                return "集群超限额";
            case "6":
                return "无权限访问该用户数据";
            case "13":
                return "获取token失败";
            case "14":
                return "IAM 鉴权失败";
            case "15":
                return "应用不存在或者创建失败";
            case "17":
                return "每天请求量超限额";
            case "18":
                return "QPS超限额";
            case "19":
                return "请求总量超限额";
            case "100":
                return "无效的access_token参数";
            case "110":
                return "access_token无效    ";
            case "111":
                return "access token过期";
            case "222001":
                return "必要参数未传入";
            case "222201":
                return "服务端请求失败";
            case "222202":
                return "图片中没有人脸";
            case "222203":
                return "无法解析人脸";
            case "222204":
                return "从图片的url下载图片失败";
            case "222205":
                return "服务端请求失败";
            case "222206":
                return "服务端请求失败";
            case "222207":
                return "未找到匹配的用户";
            case "222208":
                return "图片的数量错误";
            case "222209":
                return "face token不存在";
            case "222300":
                return "人脸图片添加失败";
            case "222301":
                return "获取人脸图片失败";
            case "222302":
                return "服务端请求失败";
            case "222303":
                return "获取人脸图片失败";
            case "223100":
                return "操作的用户组不存在";
            case "223101":
                return "该用户组已存在";
            case "223103":
                return "找不到该用户";
            case "223104":
                return "group_list包含组数量过多";
            case "223105":
                return "该人脸已存在";
            case "223106":
                return "该人脸不存在";
            case "223110":
                return "uid_list包含数量过多";
            case "223111":
                return "目标用户组不存在";
            case "223112":
                return "quality_conf格式不正确";
            case "223113":
                return "人脸有被遮挡";
            case "223114":
                return "人脸模糊";
            case "223115":
                return "人脸光照不好";
            case "223116":
                return "人脸不完整";
            case "223117":
                return "app_list包含app数量过多";
            case "223118":
                return "质量控制项错误";
            case "223119":
                return "活体控制项错误";
            case "223120":
                return "活体检测未通过";
            case "223122":
                return "质量检测未通过 右眼遮挡程度过高";
            case "223123":
                return "质量检测未通过 左脸遮挡程度过高";
            case "223124":
                return "质量检测未通过 右脸遮挡程度过高";
            case "223125":
                return "质量检测未通过 下巴遮挡程度过高";
            case "223126":
                return "质量检测未通过 鼻子遮挡程度过高";
            case "223127":
                return "质量检测未通过 嘴巴遮挡程度过高";
            case "222350":
                return "公安网图片不存在或质量过低";
            case "222351":
                return "身份证号与姓名不匹配或该身份证号不存在";
            case "222352":
                return "身份证名字格式错误";
            case "222353":
                return "身份证号码格式错误";
            case "222354":
                return "公安库里不存在此身份证号";
            case "222355":
                return "身份证号码正确，公安库里没有对应的照片";
            case "222360":
                return "身份证号码或名字非法（公安网校验不通过）";
            default:
                return json;
        }
    }


    /**
     * 返回成功消息
     * @param msg  返回消息
     * @return 返回结果
     */
    public static BaiDuAiResult success(String msg) {
        return new BaiDuAiResult(Type.SUCCESS, msg);
    }

    /**
     * 返回警告消息
     * @param type 返回类型
     * @param msg 返回消息
     * @return 返回结果
     */
    public static BaiDuAiResult warn(Type type, String msg) {
        return new BaiDuAiResult(type, msg);
    }

    /**
     * 返回警告消息
     * @param msg 返回消息
     * @return 返回结果
     */
    public static BaiDuAiResult warn(String msg) {
        return new BaiDuAiResult(Type.WARN, msg);
    }

    /**
     * 返回错误消息
     * @param type 返回类型
     * @param msg 返回消息
     * @return 返回结果
     */
    public static BaiDuAiResult error(Type type, String msg) {
        return new BaiDuAiResult(type, msg);
    }
    /**
     * 返回错误消息
     * @param msg 返回消息
     * @return 返回结果
     */
    public static BaiDuAiResult error(String msg) {
        return new BaiDuAiResult(Type.ERROR, msg);
    }

    /**
     * 错误码
     */
    public enum Type {
        /**
         * 成功
         */
        SUCCESS(0),
        /**
         * 警告
         */
        WARN(301),
        /**
         * 错误
         */
        ERROR(500),
        /**
         * 人脸未注册
         */
        NOTREGISTER(404);

        private final int value;

        Type(int value) {
            this.value = value;
        }

        public int value() {
            return this.value;
        }
    }

}
